package com.yfs.cloud.commons;

import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

import com.yfs.cloud.util.JsonUtil;

/**
* @Company: 影法師工作室
* @Description: 对接口正常返回值统一标准格式的代码封装, 即没有抛出异常 
* @author 影法師  
* @date 2020年8月24日 下午4:12:52 
* @version V1.0
 */
@RestControllerAdvice(basePackages = "com.yfs.cloud.controller")
public class ResponseHandler implements ResponseBodyAdvice<Object> {

	/**
	 * 处理response的具体业务方法
	 */
	@Override
	public Object beforeBodyWrite(Object object, MethodParameter methodParameter, MediaType mediaType,
			Class<? extends HttpMessageConverter<?>> clazz, ServerHttpRequest httpRequest,
			ServerHttpResponse httpResponse) {
		if (object instanceof String) {
			return JsonUtil.obj2json(Result.suc(object)); // 如果是 String的话, 一定要先封装成 Result 才行, 不然报错
		} else {
			return Result.suc(object);
		}
	}

	/**
	 * 是否支持 advice 功能 true 表示支持, false 表示不支持
	 */
	@Override
	public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> clazz) {
		return true;
	}

}
